Skip to content

Module loader: a failed load of a replaced module must not leave its error on the replacement (tests for oven-sh/WebKit#754) - #39711

Draft
robobun wants to merge 1 commit into
mainfrom
farm/4ad8a864/module-loader-removed-entry-error
Draft

robobun wants to merge 1 commit into
mainfrom
farm/4ad8a864/module-loader-removed-entry-error

Conversation

@robobun

@robobun robobun commented Aug 20, 2026 •

Copy link
Copy Markdown
Collaborator

Tests for oven-sh/WebKit#754. Draft: the seven tests fail on main until that engine change is pinned, so CI is red here by design. This PR changes no WEBKIT_VERSION until oven-sh/WebKit#754 is merged.

Problem

  • A module that is replaced while its import() is in flight (mock.module(), build.module(), a --hot reload) and then fails leaves its error on the replacement. Every later import() or require() of it rejects. Bun 1.3.13 returns the replacement. Debug builds stop at ASSERTION FAILED: m_status == Status::Fetching in ModuleRegistryEntry::fetchComplete.
  • Cause, in JavaScriptCore: a failed load stores its error by key (JSMicrotask.cpp:1281, :1436, :1253). Fix a crash when a module is removed while its import() is in flight #44281 fixed the crash in this window and left this out (review).

Fix

Background

  • The ES module registry maps a key to an entry that holds one error. A later import() of a key whose entry holds an error gets that error without loading anything.
  • mock.module(), build.module() and a hot reload remove entries while a load can be in flight. Since require.cache: deleting an ES module that is still loading is a no-op #40123, delete require.cache[path] does not. That made the first eight tests of this PR obsolete.

Downsides

These are the costs of the engine change. oven-sh/WebKit#754 has the details.

  • Each import(), require() of an ES module and entry point load does two more registry lookups and two pointer stores: about 115 instructions counted in the release disassembly, not measured (perf and valgrind were not available). Engine text grows by 359 bytes.
  • One result changes with nothing removed: after an import() failed at its fetch while another load registered the module, the next import() gets the module, not that error.
  • Still wrong after this: build.module() or mock.module() right after an import() that has not registered yet. The replacement is then ignored (next: file).
Notes

Output on main and with the engine change (debug+ASAN builds of one tree):

test main with oven-sh/WebKit#754
a module that build.module() replaced while it was evaluating does not leave its error on the replacement (import, require) next: the replaced module threw next: build.module()
an onLoad that rejects with another module's error does not leave it on the module build.module() put in its place next: rejected: another module threw next: build.module()
mock.module() of a module whose import() is in flight and then throws the last import() rejects with the replaced module threw 1 pass
mock.module() of a file whose import() before it failed ASSERTION FAILED: m_status == Status::Fetching (release: the later import() rejects with the JSON parse error) 2 pass
should keep the module a hot reload loaded when the import() from before the reload rejects next: rejected: the module from before the reload threw next: evaluation 1
an import() that failed to parse does not leave its error on the module a later import() loaded ASSERTION FAILED: m_status == Status::Fetching first: rejected: SyntaxError, later: 42

The build.module() test is the one that an earlier commit of #44281 (f440486) carried for this bug, with the replaced module as .mjs so that the require() variant goes through the ES module loader too. The last test uses JSON because Bun reads JSON on the calling thread, which fixes the order of the two fetches. It does not assert what the overlapping second import() gets.

#40267 (open) handles the route with nothing removed from Bun's side: a second import() of a module whose load is pending joins that load. It does not conflict with the engine change, but with that join an import() issued after mock.module() or build.module() replaced a module still joins the pending load of the replaced module. Five of the tests here import the replacement while the replaced load is pending, so this PR and that one cannot both land unchanged.

Suites run on a debug build of this tree with the engine of oven-sh/WebKit#754: test/js/bun/plugin/, test/js/bun/test/mock/, test/js/bun/resolve/, test/js/node/module/ (669 pass, 2 fail), test/cli/hot/hot.test.ts and test/cli/test/isolation.test.ts (63 pass). The two failures are load the same file 2000 times and load the same empty JS file 2000 times, which time out on a debug+ASAN build with main's engine too.

After the wrong result, delete require.cache[path] and a new import() recover, and require(path) returns the replacement.

CI on this PR before the pin: the four files with the new tests fail on every lane. That is the expected state.

@coderabbitai

coderabbitai Bot commented Aug 20, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: oven-sh/bun/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Essentials

Run ID: 415028a4-2d91-4419-ae0c-0b8e3374999c

📥 Commits

Reviewing files that changed from the base of the PR and between f4d755a and 42c2823.

📒 Files selected for processing (3)
  • test/cli/hot/hot.test.ts
  • test/js/bun/plugin/plugins.test.ts
  • test/js/bun/test/mock/mock-module.test.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 0 remain after this review.


Walkthrough

Adds regression tests for module loading during failures, concurrent imports, mock registration, and hot reload. The tests check error results and whether later imports receive replacement or mocked modules.

Changes

Module loading error isolation

Layer / File(s) Summary
Plugin module replacement and concurrent loads
test/js/bun/plugin/plugins.test.ts
Tests that a failed module load reports its error while a later import returns a registered replacement. A concurrent-load test checks that a failure does not affect another successful load.
Mocks during failed or pending imports
test/js/bun/test/mock/mock-module.test.ts
Tests that imports return a registered mock while an earlier or in-flight real module load fails.
Pending imports across hot reload
test/cli/hot/hot.test.ts
Tests that a post-reload import resolves, the pre-reload import rejects with its error, and a later import resolves.

Priority: ⬇️ Low

Merge Risk: ⚪ Minimal · up to 42c28

The tests cover replacement, mocked imports, concurrent failures, and hot reload without relying on the suppressed deletion path. No merge-blocking issue is established; normal test validation remains necessary.

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly identifies the module-loader error-isolation issue and the related regression tests. It is specific, though the parenthetical reference makes it longer than necessary.
Description check ✅ Passed The description explains the problem, the proposed engine-side fix, the test coverage, and how the tests were verified. It covers both topics required by the template, even though it does not use the …
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Autopilot is currently an internal CodeRabbit preview.


Comment @coderabbitai help to get the list of available commands.

@robobun

robobun commented Aug 20, 2026 •

Copy link
Copy Markdown
Collaborator Author

Status (2026-10-02): reworked onto main. Engine change: oven-sh/WebKit#754 (replaces oven-sh/WebKit#474). This PR holds only the tests for it and stays a draft until that change is merged and pinned.

How it reproduces, on main (debug build, engine fb1167ebf2cb) and on 1.4.3-canary: a module registers build.module() for its own path while it evaluates, imports the replacement, then throws.

while evaluating: build.module()
first: the replaced module threw
next: the replaced module threw     <- expected: build.module()

The same wrong result comes from mock.module() of a module whose import() is in flight, from a --hot reload, and, with nothing removed, from a JSON file that is fixed and imported again before its failed import() has settled. The seven tests here cover those routes. All seven fail on main and pass with bun bd --webkit-version=autobuild-preview-pr-754-08bf0974.

CI on this PR: the four files with the new tests fail on every lane until the engine change is pinned. That is expected.

Comment thread scripts/build/deps/webkit.ts Resolved
@robobun

robobun commented Aug 20, 2026

Copy link
Copy Markdown
Collaborator Author

The review note on scripts/build/deps/webkit.ts:6 is the expected state for this PR: the preview pin is a placeholder until oven-sh/WebKit#472 and oven-sh/WebKit#474 merge. I will move WEBKIT_VERSION to the merged main sha then, after #39674 does the same for #472. Nothing else is pending from the bot reviews.

@robobun
robobun force-pushed the farm/4ad8a864/module-loader-removed-entry-error branch from 253e70c to b3bddca Compare August 20, 2026 11:54
@robobun

robobun commented Aug 20, 2026 •

Copy link
Copy Markdown
Collaborator Author
Updated 10:03 PM PT - Oct 2nd, 2026

❌ @robobun, your commit cb4ab0c has 5 failures in Build #123129 (All Failures):


🧪   To try this PR locally:

bunx bun-pr 39711

That installs a local version of the PR into your bun-39711 executable, so you can run:

bun-39711 --bun

@robobun
robobun changed the base branch from main to farm/ae0c7496/module-loader-removed-entry-in-flight August 20, 2026 11:54
@robobun

robobun commented Aug 20, 2026

Copy link
Copy Markdown
Collaborator Author

Restacked: this PR is now based on #39674 (the Bun side of oven-sh/WebKit#472), mirroring oven-sh/WebKit#474 on #472, so the diff is the pin move plus the tests. The failure-shape tests now extend #39674's fixture instead of duplicating it, and three tests were added for the part of the engine change that is visible without delete require.cache: a file or plugin module whose load failed is loaded again by the next import() or require() (build-error.test.ts, plugins.test.ts). All eight fail on the base pin and pass on the new one. Description updated.

@robobun

robobun commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator Author

The conflict came from the base moving: #39674 was rebased onto current main (its pin is now the oven-sh/WebKit#472 preview rebased onto b7f217b4), and oven-sh/WebKit#472 itself was rebased, so oven-sh/WebKit#474 is rebased on top of it (same two commits, files unchanged) and this branch is rebased onto the new #39674 head. The only conflict was the WEBKIT_VERSION line, resolved to the preview tag of the rebased #474. The push follows as soon as that preview build is published, so that CI runs against it.

@robobun
robobun force-pushed the farm/4ad8a864/module-loader-removed-entry-error branch from b3bddca to 0ff6fbc Compare August 21, 2026 05:29
@robobun

robobun commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator Author

Rebased and pushed. oven-sh/WebKit#474 now sits on the rebased oven-sh/WebKit#472 (its two commits apply unchanged, all five engine files are byte-identical to the reviewed version), this branch sits on the rebased #39674, and the pin is the new #474 preview autobuild-preview-pr-474-4875ff69. The only conflict was the WEBKIT_VERSION line. Re-checked on this base: the eight new tests fail against the base pin (autobuild-preview-pr-472-86b6c4df) and pass against the new one, as do #39674's tests. The PR is mergeable again.

@robobun

robobun commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator Author

Re-checked after a second conflict notice: nothing to resolve. The base (#39674's branch) is still at dd6015e7c6, the commit this branch was rebased onto, GitHub reports the PR as mergeable against it, and a test merge of this branch into current main (git merge-tree) is clean as well, since no main commit since the merge base touches the five files involved. The notice predates the rebase pushed as 0ff6fbc816. CI for that head is running (Buildkite build 102338).

@robobun
robobun force-pushed the farm/ae0c7496/module-loader-removed-entry-in-flight branch from dd6015e to c45fe34 Compare August 21, 2026 08:22
@robobun
robobun force-pushed the farm/4ad8a864/module-loader-removed-entry-error branch from 0ff6fbc to ed28db8 Compare August 21, 2026 11:36
@robobun

robobun commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator Author

Rebased again: #39674 (the base) was rebased onto current main, so this branch was rebased onto its new head (c45fe342c9). The three commits applied without conflicts, the diff against the base is unchanged (pin plus the same tests), and the pin still points at the current oven-sh/WebKit#474 preview since neither engine PR moved. The touched test files pass on the rebased tree; the PR is mergeable again.

@robobun
robobun force-pushed the farm/ae0c7496/module-loader-removed-entry-in-flight branch from c45fe34 to f2b3d94 Compare August 22, 2026 07:25
@robobun
robobun force-pushed the farm/4ad8a864/module-loader-removed-entry-error branch from ed28db8 to b8699f8 Compare August 22, 2026 07:38
@robobun

robobun commented Aug 22, 2026

Copy link
Copy Markdown
Collaborator Author

Rebased onto the new head of #39674 (f2b3d945e2, itself rebased onto current main). The three commits applied without conflicts; the diff against the base is unchanged (pin plus the same eight tests) and the pin still points at the current oven-sh/WebKit#474 preview, since neither engine PR has moved. The plugin test file picked up main's new object-loader test (#39998) next to the test added here; both files pass on the rebased tree. Mergeable again.

@robobun
robobun force-pushed the farm/ae0c7496/module-loader-removed-entry-in-flight branch from f2b3d94 to c763233 Compare August 23, 2026 09:48
@robobun

robobun commented Aug 23, 2026

Copy link
Copy Markdown
Collaborator Author

Same cause as before: the base moved. oven-sh/WebKit#472 was rebased onto the current fork main (aea1f010), #39674 followed with its pin, so oven-sh/WebKit#474 is re-applied on the new #472 head (same two commits, same diff) and this branch is rebased onto the new #39674 head (c763233063). Only the WEBKIT_VERSION line conflicted; it is resolved to the preview tag of the rebased #474. The push follows once that preview build is published, so that CI runs against it.

@robobun
robobun force-pushed the farm/4ad8a864/module-loader-removed-entry-error branch from b8699f8 to 6290823 Compare August 23, 2026 10:44
@robobun

robobun commented Aug 23, 2026

Copy link
Copy Markdown
Collaborator Author

Pushed. oven-sh/WebKit#474 is re-applied on the rebased #472 (its diff is unchanged), its preview autobuild-preview-pr-474-0bddaf4d is published and pinned here, and this branch sits on the current #39674 head. The only conflict was the WEBKIT_VERSION line; main's new plugin test (#40069) merged next to the one added here without conflict. The touched test files pass on the rebased tree. Mergeable again.

@robobun
robobun force-pushed the farm/ae0c7496/module-loader-removed-entry-in-flight branch from c763233 to f4e43ed Compare August 24, 2026 12:54
@robobun

robobun commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator Author

The base moved again (#39674 now on the oven-sh/WebKit#472 preview at f7cb3cb4; #472 itself has since moved once more onto the fork main with the 6b879687ee upgrade). oven-sh/WebKit#474 is re-applied on the current #472 head (6a17c6a216). This time the residual needed one adaptation: fork main now skips provideFetch() in moduleLoadTopSettled for an entry registered through provideModule(), so the line that records the entry moved after that conditional block and covers both cases. The rest of the diff is unchanged. This branch is rebased onto the new #39674 head (b067a2117f); only the WEBKIT_VERSION line conflicted. The push follows once the preview build is published.

@robobun
robobun force-pushed the farm/ae0c7496/module-loader-removed-entry-in-flight branch from b067a21 to a96449c Compare August 28, 2026 09:38
@robobun

robobun commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator Author

Holding the push. oven-sh/WebKit#474 now sits on the #472 head that includes the 6b879687ee upgrade, and its preview (autobuild-preview-pr-474-0e817363) is published, but this PR's base (#39674 at b067a2117f) predates main's adaptation to that engine (#40681: moduleLoaderFetch gained a referrer argument), so a bun tree built from this base against the new preview does not compile (BakeGlobalObject.cpp:223). Pinning an older preview is not an option either (the previous #474 preview build was superseded before it published). The branch is rebased and pinned locally; it gets pushed as soon as #39674 has rebased onto current main, which its own conflict with main calls for.

@robobun
robobun force-pushed the farm/ae0c7496/module-loader-removed-entry-in-flight branch from a96449c to e6fa177 Compare August 28, 2026 10:31
@robobun

robobun commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator Author

The base now includes main's adaptation to the upgraded engine (#40681), so the hold is over. oven-sh/WebKit#474 is re-applied on the current #472 head (eaacac2867, on fork main ceb9f90f) with an identical diff, and this branch is rebased onto the new #39674 head (e6fa1776e8); only the WEBKIT_VERSION line conflicted and it is resolved to the preview tag of the rebased #474. The push follows once that preview build is published.

@robobun
robobun force-pushed the farm/ae0c7496/module-loader-removed-entry-in-flight branch from e6fa177 to 768ee79 Compare August 28, 2026 14:43
@robobun
robobun force-pushed the farm/4ad8a864/module-loader-removed-entry-error branch from 63fb669 to 6517673 Compare August 28, 2026 15:18
@robobun

robobun commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator Author

Pushed. oven-sh/WebKit#474 sits on the current #472 head (identical diff), its preview autobuild-preview-pr-474-56b8426b is published and pinned here, and this branch sits on the current #39674 head, which carries main's adaptation to the upgraded engine. Only the WEBKIT_VERSION line conflicted. The tree builds against the new preview and the touched test files pass. Mergeable again.

@robobun
robobun force-pushed the farm/4ad8a864/module-loader-removed-entry-error branch from 6517673 to 54f5bd2 Compare August 28, 2026 15:20
@robobun

robobun commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator Author

#39674 moved once more while the previous push was being verified (it now pins the #472 preview eaacac28, the same #472 head oven-sh/WebKit#474 already sits on), so this branch is rebased onto its new head (768ee79a93) with the same pin. Only the WEBKIT_VERSION line conflicted. Builds and the touched test files pass. Mergeable again.

@claude claude Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code review found no issues

No high-confidence issues detected in this change.

@robobun

robobun commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator Author

Bot review of 54f5bd2b found nothing, no review threads are open on either PR. On its CI run (Buildkite 107738, 177 of 181 jobs done) the new tests pass on every lane; the one red test is url.test.ts on Darwin x64, the pre-existing main failure already with triage.

@robobun
robobun force-pushed the farm/4ad8a864/module-loader-removed-entry-error branch from 54f5bd2 to 42c2823 Compare October 1, 2026 19:59
@robobun
robobun changed the base branch from farm/ae0c7496/module-loader-removed-entry-in-flight to main October 1, 2026 19:59
@robobun
robobun marked this pull request as draft October 1, 2026 19:59
expect(exitCode).toBe(0);
});

test.concurrent("mock.module() of a module whose import() is in flight and then throws", async () => {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 Maintainers get six tests that fail in CI on every run after merging, if this lands before the engine fix it depends on is pinned. The commit message says the new tests "fail on main" and only pass with oven-sh/WebKit#754, but scripts/build/deps/webkit.ts:6 still pins WEBKIT_VERSION to fb1167ebf2cb9edc1f6771a2c11771b024693ae0 and nothing gates the tests. In a debug build the mock.module() case also stops at an assertion in fetchComplete(). Fix: land this only after WEBKIT_VERSION is bumped to a main SHA containing #754, or until then mark the six tests with test.todo/test.todoIf so a red run means a regression. Sites: test/js/bun/test/mock/mock-module.test.ts:544,585; test/js/bun/plugin/plugins.test.ts:1117,1165; test/cli/hot/hot.test.ts:832. [also at: test/cli/hot/hot.test.ts:833 - CI turns red for everyone after merging: six new tests fail against the WebKit this tree pins. The commit itself says they "fail on main" and pass only with oven-sh/WebKit#754, but scripts/build/deps/webkit.ts:6 still pins fb1167ebf2cb9edc1f6771a2c11771b024693ae0, which is the…; scripts/build/deps/webkit.ts:6 - Six new tests fail on the pinned engine, so merging turns CI red where the base is green. The pin at scripts/build/deps/webkit.ts:6 is fb1167ebf2cb9edc1f6771a2c11771b024693ae0, main's tip from #44281, which holds oven-sh/WebKit#748 and #749 but not the loader fix of oven-sh/WebKit#754 that the HEAD commit says these tests need.]

Why this was flagged

The trigger is merging this change while the pinned JavaScriptCore does not contain the fix in oven-sh/WebKit#754; the author's own commit message for 42c2823 says the six tests fail on main and pass only with that engine change. The change adds plain it()/test.concurrent() tests at test/js/bun/test/mock/mock-module.test.ts:544 and :585, test/js/bun/plugin/plugins.test.ts:1117 and :1165, and test/cli/hot/hot.test.ts:832, with no todo/skip gating. scripts/build/deps/webkit.ts:6 is unchanged by this commit and pins WEBKIT_VERSION = "fb1167ebf2cb9edc1f6771a2c11771b024693ae0", a main SHA from #44281, not a build of #754. On the base branch these tests do not exist, so the suite is green; after merging, every CI run on every PR reports these tests red, and on debug builds the mock.module() case hits the fetchComplete() assertion the message describes. No safeguard applies: the test runner has no engine-version gate and the tests do not check for the engine fix.

Verification: Commit 42c2823 does not touch scripts/build/deps/webkit.ts, whose line 6 still pins WEBKIT_VERSION fb1167ebf2cb9edc1f6771a2c11771b024693ae0. The six added tests at test/js/bun/test/mock/mock-module.test.ts:544 and :589, test/js/bun/plugin/plugins.test.ts:1117 and :1165, and test/cli/hot/hot.test.ts:832 have no .todo, .skip or version check. The pin's commit 7fe13e1 brings in only oven-sh/WebKit#748 and #749, not #754.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correct, and that is why this PR is a draft. It must not merge before WEBKIT_VERSION is a main sha that contains oven-sh/WebKit#754. The pin moves in this PR once that engine change is merged, and the PR leaves draft then. I did not mark the tests as todo: they would then merge ahead of the fix, and a todo test does not fail when the bug comes back. This thread stays open until the pin is in.

@robobun robobun changed the title Module loader: a removed module whose in-flight load fails no longer poisons later imports of it (WebKit bump for oven-sh/WebKit#474) Module loader: a failed load of a replaced module must not leave its error on the replacement (tests for oven-sh/WebKit#754) Oct 1, 2026
@robobun
robobun force-pushed the farm/4ad8a864/module-loader-removed-entry-error branch from 42c2823 to eb998a9 Compare October 1, 2026 22:09
@robobun

robobun commented Oct 1, 2026

Copy link
Copy Markdown
Collaborator Author

Reworked. The crash fix landed in #44281, the base PR is closed, and #40123 made delete require.cache of a loading module a no-op, so the old content of this PR no longer tested anything. The wrong result is still on main through mock.module(), build.module() and a --hot reload (repro in the status comment).

What is here now:

The description has the details, the cost and what this does not fix.

…the replacement

Seven tests that fail on main. A module that mock.module(), a plugin's
build.module() or a --hot reload replaced while its import() was in
flight, and that then fails, leaves its error on the replacement: every
later import() of the replacement rejects with the replaced module's
error. The same happens without a removal when an import() fails at its
fetch and the file is imported again before that failure has settled.
In a debug build that case stops at an assertion in fetchComplete().

They pass with the engine change of oven-sh/WebKit#754.

Co-authored-by: Dylan Conway <dylan.conway567@gmail.com>
@robobun
robobun force-pushed the farm/4ad8a864/module-loader-removed-entry-error branch from 8cefbb1 to cb4ab0c Compare October 3, 2026 03:42
@robobun

robobun commented Oct 3, 2026

Copy link
Copy Markdown
Collaborator Author

Update after a self-review of the engine change, and a rebase over #44473:

  • [JSC] A failed loadModule() stores its error in the registry entry it loaded WebKit#754 has a second commit. A load whose fetch failed now also leaves another load's entry alone at the third place where a failed load stored by key (a fetch that rejects with an error the loader tagged). The engine PR also has its own JSTests stress test for the route that needs no removal; it runs in that repository's CI.
  • The tests here are seven now. The one that assumed that two overlapping import()s each call onLoad is replaced by one that does not depend on that (a JSON file that is fixed and imported again before its failed import() settles), and there is a test for the third store (build.module() while an onLoad runs).
  • On the rebased head all seven still fail on main's engine on every lane (Buildkite 123129), as intended for this draft. The only other red file there, spawn.test.ts, fails on main as well.

The description has the route table, the cost, what is not fixed, and how this relates to #40267.

@robobun

robobun commented Oct 3, 2026

Copy link
Copy Markdown
Collaborator Author

The run that was still pending is done. On this branch (main with #44473) and the preview build of oven-sh/WebKit#754, the seven tests pass, three runs (bun bd --webkit-version=autobuild-preview-pr-754-08bf0974). With main's engine all seven fail on every CI lane (Buildkite 123129). The plugin, mock, resolve and node:module suites give 669 pass and 2 fail with the preview build, the two being load-same-js-file-a-lot timeouts that a debug+ASAN build has with main's engine too, and the hot reload and isolation suites pass.

oven-sh/WebKit#754 is out of draft and waits for a maintainer. This PR stays a draft until that change is merged, then gets the WEBKIT_VERSION of the merged sha. The bot reviews of this head have no open finding other than that merge order.

@robobun

robobun commented Oct 27, 2026

Copy link
Copy Markdown
Collaborator Author

A note for the time when oven-sh/WebKit#754 merges. Since 2026-10-27 that PR has a second commit: a fetch that rejects registers nothing.

The branch robobun/e3bb2c6e/module-load-error-own-entry-tests is this branch plus two commits:

  • A merge of main (9b8347a). There is one conflict, in test/js/bun/test/mock/mock-module.test.ts: both sides added tests after the same test.
  • One more test in test/js/bun/plugin/plugins.test.ts, for that second commit: a static import of a module whose onLoad rejected with another module's error loads the module. Without the engine change the import() of the importer never settles.

Results on debug builds with assertions:

This PR is not changed. It still waits for the merge and for the WEBKIT_VERSION of the merged sha.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant